package com.itzhoun.createModel.singleton;

/**
 * 懒汉式线程不安全
 * @author 周楠
 * @Date 2022/12/08/下午 10:43
 */
public class SingletonLazy {

    public SingletonLazy() {
    }

    public static SingletonLazy singletonLazy = null;

    int ticket = 10;

    public static SingletonLazy getInstance(){
        if (singletonLazy == null){
            singletonLazy = new SingletonLazy();
            System.out.println("懒汉式对象" + singletonLazy);
        }
        return singletonLazy;
    }

    public void setTicket(){
        ticket--;
    }

    public static void main(String[] args) {

        Runnable runnable = SingletonLazy::getInstance;

        Thread thread = new Thread(runnable);
        thread.start();
        Thread thread2 = new Thread(runnable);
        thread2.start();



        //这里定义了两个线程，创建了两个对象 因此线程不安全

        //优点：这种写法起到了Lazy Loading的效果，但是只能在单线程下使用
        //缺点: 如果在多线程下，一个线程进入了if (singleton == null)判断语句块，还未来得及往下执行，另一个线程也通过了这个判断语句，这时便会产生多个实例。所以在多线程环境下不可使用这种方式



    }

}
